/**
 * 
 */
package com.ubo.visu.painter;

import com.ubo.visu.model.EEntityType;
import com.ubo.visu.model.MemberAttribute;
import com.ubo.visu.model.MemberMethod;
import com.ubo.visu.model.ModelNode;
import com.ubo.visu.util.PropertiesConstant;
import com.ubo.visu.util.PropertiesManager;

/**
 * @author saludegu
 * 
 */
public class UtilsSize implements PropertiesConstant {

	/**
	 * Renvoie la hauteur d'un node.
	 * 
	 * @param node
	 * @return
	 */
	public static final double computeRectangleHeight(ModelNode node) {
		double res = 0;
		double factor = PropertiesManager.getInstance().getDoubleProperty(
				PROPERTY_RECTANGLE_HEIGHT);
		if (node.getEntityType().equals(EEntityType.INTERFACE))
			res += factor;
		// Ajout du titre et de la première barre.
		res += factor * 1.5;
		// Calcul de la taille nécessaire pour placer les attributs.
		if (node.getAttributes() != null) {
			res += factor * node.getAttributes().size();
			// Ajout de la barre suivante.
			res += factor * 0.5;
		}
		// Calcul de la taille nécessaire pour placer les méthodes.
		if (node.getMethodes() != null) {
			res += factor * node.getMethodes().size();
		}
		return res;
	}

	/**
	 * Renvoie la hauteur d'un node.
	 * 
	 * @param node
	 * @return
	 */
	public static final double computeRectangleWidth(ModelNode node) {
		double res = 0;
		double factor = PropertiesManager.getInstance().getDoubleProperty(
				PROPERTY_RECTANGLE_WIDTH);
		int maxLength = 0;
		// Recherche de la ligne la plus grande.
		// CheckNodeName
		if (node.getEntityType().equals(EEntityType.INTERFACE))
			maxLength = 13;
		if (maxLength < node.getNameNode().length())
			maxLength = node.getNameNode().length();
		// Calcul de la taille nécessaire pour placer les attributs.
		if (node.getAttributes() != null) {
			for (MemberAttribute mAttr : node.getAttributes()) {
				String currStrAttr = mAttr.toString();
				if (currStrAttr.length() > maxLength)
					maxLength = currStrAttr.length();
			}
		}
		// Calcul de la taille nécessaire pour placer les méthodes.
		if (node.getMethodes() != null) {
			for (MemberMethod meth : node.getMethodes()) {
				String currStrMeth = meth.toString();
				if (currStrMeth.length() > maxLength)
					maxLength = currStrMeth.length();
			}
		}
		res = maxLength * factor + 15;
		return res;
	}
}
